﻿using System;
using System.Collections.Generic;
using System.Linq;
using WebApp.Models;
using WebApp.ViewModels;

namespace WebApp.Extensions.Logic
{
    public static class BO_Aggiunte
    {
        public static IEnumerable<EL_Aggiunta> ING_Get(this REL_Ordine_Variante set_ord_var_src)
        {
            var l_ing = set_ord_var_src
                .ENT_Piatto
                .REL_Piatto_Ingrediente
                .Select(x => x.Ingrediente)
                .Union(set_ord_var_src
                    .ENT_Piatto
                    .ENT_Gruppo
                    .REL_Gruppo_Ingrediente
                    .Select(x => x.Ingrediente));
            var l_sel = set_ord_var_src
                .SET_Variante
                .Select(x => x.Ingrediente).ToList();
            var l_exc = l_ing.Except(l_sel).ToList();

            var entities = new Entities();

            var s_com = entities
                .ENT_Ingrediente
                .Where(x => l_exc.Contains(x.Guid))
                .Select(x => new EL_Aggiunta{ Nome = x.Nome, Ingrediente = x.Guid, Selezionato = false} );
            return s_com
                .Union(entities
                    .ENT_Ingrediente.Where(x => l_sel.Contains(x.Guid))
                    .Select(x => new EL_Aggiunta { Nome = x.Nome, Ingrediente = x.Guid, Selezionato = true })
                    )
            .OrderBy(x => x.Nome);
        }

        public static void ING_Free(this REL_Ordine_Variante set_ord_var_src, Guid ingrediente)
        {
            var entities = new Entities();
            foreach (var item in entities.SET_Variante.Where(x => x.Variante == set_ord_var_src.Guid))
            {
                entities.Entry(item).State = System.Data.EntityState.Deleted;
            }
            entities.SaveChanges();
        }

        public static void ING_Del(this REL_Ordine_Variante set_ord_var_src, Guid ingrediente)
        {
            var entities = new Entities();
            var item = entities.SET_Variante.Where(x => x.Variante == set_ord_var_src.Guid && x.Ingrediente == ingrediente).FirstOrDefault();
            if (item != null)
            {
                entities.Entry(item).State = System.Data.EntityState.Deleted;
                entities.SaveChanges();
            }
        }

        public static void ING_Set(this REL_Ordine_Variante set_ord_var_src, Guid ingrediente)
        {
            SET_Variante item = new SET_Variante();
            item.Guid = Guid.NewGuid();
            item.Ingrediente = ingrediente;
            item.Variante = set_ord_var_src.Guid;
            var entities = new Entities();
            entities.SET_Variante.Attach(item);
            entities.Entry(item).State = System.Data.EntityState.Added;
            entities.SaveChanges();
        }
    }
}